Presentation is loading. Please wait.

Presentation is loading. Please wait.

Custom Dialog Box Alternatives And Dealing with FileNames Joanna Wyrobek.

Similar presentations


Presentation on theme: "Custom Dialog Box Alternatives And Dealing with FileNames Joanna Wyrobek."— Presentation transcript:

1 Custom Dialog Box Alternatives And Dealing with FileNames Joanna Wyrobek

2 The VBA InputBox function The syntax for VBA's InputBox function is InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile, context]) prompt: Required. The text displayed in the input box. title: Optional. The caption displayed in the title bar of the input box. default: Optional. The default value to be displayed in the input box. xpos, ypos: Optional. The screen coordinates of the upper-left corner of the input box. helpfile, context: Optional. The help file and help topic. The InputBox function prompts the user for a single piece of information. The function always returns a string, so your code may need to convert the results to a value.

3 The VBA InputBox function

4 Sub GetName() Dim FirstSpace as String Dim FirstSpace As Integer Do Until UserName <> “” UserName = InputBox(“Enter your full name: “, “Identify Yourself”) Loop FirstSpace = InStr(UserName, “ “) If FirstSpace <> 0 Then UserName = Left(UserName, FirstSpace - 1) End If MsgBox “Hello “ & UserName End Sub Note that this InputBox function is written in a Do Until loop to ensure that something is entered when the input box appears. If the user clicks Cancel or doesn't enter any text, UserName contains an empty string, and the input box reappears. The procedure then attempts to extract the first name by searching for the first space character (by using the InStr function) and then using the Left function to extract all characters before the first space. If a space character isn't found, the entire name is used as entered.

5 The InputBox function always returns a string. If the string returned by the InputBox function looks like a number, you can convert it to a value by using the VBA Val function or just perform a mathematical operation on the string. The following code uses the InputBox function to prompt for a numeric value. It uses the IsNumeric function to determine if the string can be interpreted as a number. If so, it displays the user's input multiplied by 12. Sub GetValue() Dim Monthly As String Dim Annual As Double Monthly = InputBox(“Enter your monthly salary:”) If Monthly = “” Then Exit Sub On Error Resume Next If IsNumeric(Monthly) Then MsgBox “Annualized: “ & Monthly * 12 Else MsgBox “Invalid input” End If End Sub

6 The Excel InputBox method Using Excel's InputBox method rather than the VBA InputBox function offers three advantages: You can specify the data type returned (it doesn't have to be a String). The user can specify a worksheet range by dragging in the worksheet. Input validation is performed automatically. The syntax for the Excel InputBox method is InputBox(Prompt [,Title][,Default][,Left][,Top][,HelpFile, HelpContextID][,Type]) Prompt: Required. The text displayed in the input box. Title: Optional. The caption in the title bar of the input box. Default: Optional. The default value to be returned by the function if the user enters nothing. Left, Top: Optional. The screen coordinates of the upper-left corner of the window. HelpFile, HelpContextID: Optional. The Help file and Help topic. Type: Optional. A code for the data type returned, as listed in Table on the next slide.

7 Codes to Determine the Data Type Returned by Excel's Inputbox Method CodeMeaning 0A formula 1A number 2A string (text) 4A logical value (True or False) 8A cell reference, as a range object 16An error value, such as #N/A 64An array of values

8 The Excel InputBox method Excel's InputBox method is versatile. To allow more than one data type to be returned, use the sum of the pertinent codes. For example, to display an input box that can accept text or numbers, set type equal to 3 (that is, 1 + 2, or number plus text). If you use 8 for the type argument, the user can enter a cell or range address (or a named cell or range) manually or point to a range in the worksheet. The EraseRange procedure, which follows, uses the InputBox method to allow the user to select a range to erase. The user can either type the range address manually or use the mouse to select the range in the sheet.

9

10 The Excel InputBox method The InputBox method with a type argument of 8 returns a Range object (note the Set keyword). This range is then erased (by using the Clear method). The default value displayed in the input box is the current selection's address. The On Error statement ends the procedure if the input box is canceled. Sub EraseRange() Dim UserRange As Range On Error GoTo Canceled Set UserRange = Application.InputBox (Prompt:=”Range to erase:”, _ Title:=”Range Erase”, Default:=Selection.Address, _ Type:=8) UserRange.Clear UserRange.Select Canceled: End Sub

11 The Excel InputBox method Yet another advantage of using Excel's InputBox method is that Excel performs input validation automatically. If you enter something other than a range address in the GetRange example, Excel displays a message and lets the user try again.

12 The VBA MsgBox Function The official syntax for MsgBox is as follows: MsgBox(prompt[,buttons][,title][,helpfile, context]) prompt: Required. The text displayed in the message box buttons: Optional. A numeric expression that determines which buttons and icon are displayed in the message box. title: Optional. The caption in the message box window helpfile, context: Optional. The helpfile and Help topic. You can easily customize your message boxes because of the flexibility of the buttons argument. Table on the next slide lists the many constants that you can use for this argument. You can specify which buttons to display, whether an icon appears, and which button is the default.

13 The VBA MsgBox Function VBA's MsgBox function is an easy way to display a message to the user or to get a simple response (such as OK or Cancel). Keep in mind that MsgBox is a function, and your code is halted until the message box is dismissed by the user.

14 ConstantValueDescription vbOKOnly0Display OK button only. vbOKCancel1Display OK and Cancel buttons. vbAbortRetryIgnore2Display Abort, Retry, and Ignore buttons. vbYesNoCancel3Display Yes, No, and Cancel buttons. vbYesNo4Display Ye s and No buttons. vbRetryCancel5Display Retry and Cancel buttons. vbCritical16Display Critical Message icon. vb Exclamation48Display Warning Message icon. vbI nformation64Display Information Message icon. vbDefaultButton10First button is default. vbDefaultButton2256Second button is default. vbDefaultButton3512Third button is default. vbDefaultButton4768Fourth button is default. vbSystem Modal4096 All applications are suspended until the user responds to the message box (might not work under all conditions). vbMsgBoxHelpButton16384 Display a Help button. To display help when this button is clicked, use the helpfile and context arguments

15 The VBA MsgBox Function You can use the MsgBox function by itself (to simply display a message) or assign its result to a variable. When you use the MsgBox function to return a result, the value represents the button clicked by the user. The following example displays a message and an OK button but doesn't return a result: Sub MsgBoxDemo() MsgBox “Macro finished with no errors.” End Sub Note that the single argument is not enclosed in parentheses because the MsgBox result is not assigned to a variable.

16 The VBA MsgBox Function To get a response from a message box, you can assign the results of the MsgBox function to a variable. In this situation, the arguments must be in parentheses. In the following code, I use some built-in constants to make it easier to work with the values returned by MsgBox Sub GetAnswer() Dim Ans As Integer Ans = MsgBox(“Continue?”, vbYesNo) Select Case Ans Case vbYes ‘...[code if Ans is Yes]... Case vbNo ‘...[code if Ans is No]... End Select End Sub

17 The VBA MsgBox Function ConstantValueButton Clicked vbOK1OK vbCancel2Cancel vb Abort3Abort vbRetry4Retry vbIgnore5Ignore vbYes6Yes vbNo7No

18 The VBA MsgBox Function The variable returned by the MsgBox function is an Integer data type. Actually, you don't even need to use a variable to utilize the result of a message box. The following procedure is another way of coding the GetAnswer procedure: Sub GetAnswer2() If MsgBox(“Continue?”, vbYesNo) = vbYes Then ‘...[code if Ans is Yes]... Else ‘...[code if Ans is No]... End If End Sub

19 The VBA MsgBox Function The following function example uses a combination of constants to display a message box with a Yes button, a No button, and a question mark icon; the second button is designated as the default button. For simplicity, I assigned these constants to the Config variable.

20 The VBA MsgBox Function Private Function ContinueProcedure() As Boolean Dim Config as Integer Dim Ans as Integer Config = vbYesNo + vbQuestion + vbDefaultButton2 Ans = MsgBox(“An error occurred. Continue?”, Config) If Ans = vbYes Then ContinueProcedure = True Else ContinueProcedure = False End Function

21 The VBA MsgBox Function Yo u can call the ContinueProcedure function from another procedure. For example, the following statement calls the ContinueProcedure function (which displays the message box). If the function returns False (that is, the user selects No), the procedure ends. Otherwise, the next statement is executed. If Not ContinueProcedure() Then Exit Sub

22 The VBA MsgBox Function The width of the message box depends on your video resolution. If you'd like to force a line break in the message, use the vbCrLf (or vbNewLine) constant in the text. The following example displays the message in three lines: Sub MultiLine() Dim Msg As String Msg = “This is the first line of text.” & vbCrLf & vbCrLf Msg = Msg & “This is the second line.” & vbCrLf Msg = Msg & “And this is the last line.” MsgBox Msg End Sub

23 insert a tab character by using the vbTab constant. The following procedure uses a message box to display the values in a 13 x 3 range of cells in A1:C13. It separates the columns by using a vbTab constant and inserts a new line by using the vbCrLf constant. Note that the tab stops are fixed, so if a cell contains more than 11 characters, the columns won't be aligned. Sub ShowRange() Dim Msg As String Dim r As Integer, c As Integer Msg = “” For r = 1 To 12 For c = 1 To 3 Msg = Msg & Cells(r, c).Text If c <> 3 Then Msg = Msg & vbTab Next c Msg = Msg & vbCrLf Next r MsgBox Msg End Sub

24

25 The Excel GetOpenFilename Method If your application needs to ask the user for a filename, you can use the InputBox function. But this approach is tedious and error-prone because the user must type the filename (with no browsing capability). A better approach is to use the GetOpenFilename method of the Application object, which ensures that your application gets a valid filename (as well as its complete path). This method displays the normal Open dialog box, but it does not actually open the file specified. Rather, the method returns a string that contains the path and filename selected by the user. Then you can write code to do whatever you want with the filename. The syntax for the GetOpenFilename method is as follows: Application.GetOpenFilename(FileFilter, Filterlndex, Title, ButtonText, MultiSelect) FileFilter: Optional. A string specifying file-filtering criteria. FilterIndex: Optional. The index number of the default file-filtering criteria. Title: Optional. The title of the dialog box If omitted, the title is Open. ButtonText: For Macintosh only. MultiSelect: Optional. If True, you can select multiple filenames. The default value is False.

26 The Excel GetOpenFilename Method The FileFilter argument determines what file types appear in the dialog box's Files of Type drop-down list. The argument consists of pairs of file filter strings followed by the wildcard file filter specification, with each part and each pair separated by commas. If omitted, this argument defaults to the following: “All Files (*.*),*.*” Note that the first part of this string (All Files (*.*)) is the text displayed in the Files of Type drop-down list. The second part (*.*) determines which files are displayed. The following instruction assigns a string to a variable named Filt. You can then use this string as a FileFilter argument for the GetOpenFilename method. In this case, the dialog box will allow the user to select from four file types (plus an All Files option).

27 Sub GetImportFileName() Dim Filt As String Dim FilterIndex As Integer Dim Title As String Dim FileName As Variant ‘ Set up list of file filters Filt = “Text Files (*.txt),*.txt,” & _ “Lotus Files (*.prn),*.prn,” & _ “Comma Separated Files (*.csv),*.csv,” & _ “ASCII Files (*.asc),*.asc,” & _ “All Files (*.*),*.*” ‘ Display *.* by default FilterIndex = 5 ‘ Set the dialog box caption Title = “Select a File to Import” ‘ Get the file name (Only one file can be processed Multiselect is False) FileName = Application.GetOpenFilename(FileFilter:=Filt,FilterIndex:=FilterIndex,Title: =Title, MultiSelect:=False) ‘ Exit if dialog box canceled If FileName = False Then MsgBox “No file was selected.” Exit Sub End If ‘ Display full path and name of the file MsgBox “You selected “ & FileName End Sub

28 The Excel GetOpenFilename Method

29 The Excel GetSaveAsFilename Method The GetSaveAsFilename method, which is similar to the GetOpenFilename method, displays a Save As dialog box and lets the user select (or specify) a file. The GetSaveAsFilename method returns a filename and path but doesn't take any action. The syntax for this method is Application.GetSaveAsFilename(InitialFilename, FileFilter, Filterlndex, Title, ButtonText) The arguments are InitialFilename: Optional. Specifies the suggested filename. FileFilter: Optional. A string specifying file-filtering criteria. FilterIndex: Optional. The index number of the default file- filtering criteria. Title: Optional. The title of the dialog box ButtonText: For Macintosh only.

30 Prompting for a Directory If you need to get a filename, the simplest solution is to use the GetOpenFileName method. But if you need to get a directory name only (no file), you can use Excel's FileDialog object. The following procedure displays a dialog box that allows the user to select a directory. The selected directory name (or Cancelled) is then displayed by using the MsgBox function. The FileDialog object lets you specify the starting directory by providing a value for the InitialFileName property. In this example, the code uses Excels default file path as the starting directory.

31 Sub GetAFolder () With Application.FileDialog(msoFileDialogFolderPicker).InitialFileName = Application.DefaultFilePath & “\”.Title = “Select a location for the backup”. Show If.Selectedltems.Count = 0 Then MsgBox “Canceled” Else MsgBox.Selectedltems(1) End If End With End Sub

32 Displaying Excel's Built-In Dialog Boxes Code that you write in VBA can execute many Excel Ribbon commands. And, if the command normally leads to a dialog box, your code can “make choices” in the dialog box (although the dialog box itself isn't displayed). For example, the following VBA statement is equivalent to Application.Goto Reference:=Range(“A1:C3”) But when you execute this statement, the GoTo dialog box never appears (which is almost always what you want). In some cases, however, you may want to display one of Excels built-in dialog boxes so that the user can make the choices. You can do so by writing code that executes a Ribbon command.

33 Displaying Excel's Built-In Dialog Boxes Application.CommandBars.ExecuteMso(“Shee tUnhide”)

34 Displaying Excel's Built-In Dialog Boxes The ExecuteMso method accepts one argument: an idMso parameter, which represents a Ribbon control. Unfortunately, these parameters aren't listed in the Help system. If you try to display a built-in dialog box in an incorrect context, Excel displays an error message. For example, here's a statement that displays the Format Number dialog box: Application.CommandBars.ExecuteMso (“NumberFormatsDialog”)

35 Displaying Excel's Built-In Dialog Boxes Excel has thousands of commands. How can you find the name of the one you need? One way is to use the Customize Ribbon tab of the Excel Options dialog box (right-click any Ribbon control and choose Customize the Ribbon from the shortcut menu). Virtually every command available in Excel is listed in the left panel. Find the command you need, hover your mouse cursor over it, and you'll see its command name in parentheses in the tooltip. Figure on the next slide shows an example. In this case, one learns how to display the Define Name dialog box: Application.CommandBars.ExecuteMso (“NameDefine”)

36

37 Displaying a Data Form Many people use Excel to manage lists in which the information is arranged in tabular form. Excel offers a simple way to work with this type of data through the use of a built-in data entry form that Excel can create automatically. This data form works with either a normal range of data or a range that has been designated as a table (by choosing the Insert ⇒ Tables ⇒ Table command.

38

39 Making the data form accessible For some reason, the command to access the data form isn't on the Excel Ribbon. To access the data form from Excel's user interface, you must add it to your Quick Access toolbar or to the Ribbon. Following are instructions to add this command to the Quick Access toolbar: 1. Right-click the Quick Access toolbar and choose Customize Quick Access Toolbar. The Quick Access Toolbar panel of the Excel Options dialog box appears. 2. In the Choose Commands From drop-down list, select Commands Not in the Ribbon. 3. In the list box on the left, select Form. 4. Click the Add button to add the selected command to your Quick Access toolbar. 5. Click OK to close the Excel Options dialog box. After performing these steps, a new icon will appear on your Quick Access toolbar.

40 Making the data form accessible To use a data entry form, you must arrange your data so that Excel can recognize it as a table. Start by entering headings for the columns in the first row of your data entry range. Select any cell in the table and click the Form button on your Quick Access toolbar. Excel then displays a dialog box customized to your data. You can use the Tab key to move between text boxes and supply information. If a cell contains a formula, the formula result appears as text (not as an edit box). In other words, you can't modify formulas from the data entry form. When you complete the data form, click the New button. Excel enters the data into a row in the worksheet and clears the dialog box for the next row of data.

41 Displaying a data form by using VBA Use the ShowDataForm method to display Excel's data form. The only requirement is that the data table must begin in cell A1. Alternatively, the data range can have a range name of Database. The following code displays the data form: Sub DisplayDataForm() ActiveSheet.ShowDataForm End Sub This macro will work even if the Form command has not been added to the Ribbon or the Quick Access toolbar. (s. 274)


Download ppt "Custom Dialog Box Alternatives And Dealing with FileNames Joanna Wyrobek."

Similar presentations


Ads by Google