【问题标题】:Textbox enter string and re use文本框输入字符串并重新使用
【发布时间】:2017-10-13 12:03:11
【问题描述】:

我希望能够在一个文件夹中获取 x 个文件并将它们全部放在同一个工作簿的不同工作表上。

我发现这段代码有效;

Public Sub consolWB()
    Dim FSO As Object
    Dim folder As Object, subfolder As Object
    Dim wb As Object



    Set FSO = CreateObject("Scripting.FileSystemObject")
    folderPath = "C:\Users\patrickw\Desktop\exceltest"
    Set folder = FSO.GetFolder(folderPath)

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .EnableEvents = False
        .AskToUpdateLinks = False
    End With

    For Each wb In folder.Files
        If Right(wb.Name, 3) = "xls" Or Right(wb.Name, 4) = "xlsx" Or Right(wb.Name, 4) = "xlsm" Then
            Set openWB = Workbooks.Open(wb)
            For Each ws In openWB.Worksheets
                ws.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)


            Next ws
            openWB.Close
        End If
    Next wb

    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableEvents = True
        .AskToUpdateLinks = True
    End With


End Sub

但是,这只是因为我已经设置了目标文件路径供它查看。

我想创建一个按钮,提示用户输入文件路径,然后使用该文件路径来引入文件。

我想我必须把输入变成一个字符串,然后在上面的代码中使用这个变量。

这可能吗?

在上面的示例中,新工作表只是称为“sheet1...”,是否可以自己命名这些工作表?

谢谢

【问题讨论】:

  • 您希望他们在框中输入他们想要的内容、输入到单元格中,还是打开一个框来浏览和选择文件夹?或者别的什么。
  • 我最初想要一个下拉框,然后他们可以选择正确的文件。无论采用哪种方式,我都必须能够将该字符串用作我的其他宏中的查找,如果这有意义的话?
  • 我刚刚尝试过,它实际上打开了文件。我只希望用户以字符串形式输入文件目录。然后我想在我的另一个“合并”宏中使用这个字符串,然后从该文件夹中引入 3 个文件
  • 如果您停下来思考一分钟,而不是盲目地从互联网上随机的陌生人那里复制/粘贴代码,您会意识到由于Workbooks.Open 调用,它正在打开文件。 查看代码理解它,并调整它以满足您的需求;不要只是将您的代码拼凑起来,并在网络上收集随机的零碎碎片。 @QHarr 的示例正是您需要的。

标签: excel vba


【解决方案1】:

在 button_click 事件中包含以下内容,然后在其他代码中使用路径变量。

Dim path As String
path = InputBox("Enter a file path")

如果您需要访问表单外的变量,则可以将path 声明为模块级Public 字段:

Public path As String

Private Sub CommandButton1_Click()

 path = InputBox("Enter a file path")

End Sub

Private Sub CommandButton2_Click()
 Debug.Print path
End Sub

或者更好的是,如果 path 不应该从表单外部分配,则用属性封装它:

Private path As String

Public Property Get SelectedPath() As String
    SelectedPath = path
End Property

Private Sub CommandButton1_Click()
    path = InputBox("Enter a file path")
End Sub

这样,表单外的代码可以读取SelectedPath,但不能写入到私有字段或修改属性的值。

也就是说,考虑 using a FileDialog insteadInputBox,以获得更好的用户体验和更轻松的输入验证。

【讨论】:

  • 这就是我想要的!我单击第一个按钮并进入目录,但是,当我单击第二个按钮时,我收到运行时错误 5 消息 现在是“合并”宏中的新行吗?文件夹路径 = 路径
  • 太棒了。如果它符合您想要的关闭,请接受作为答案。我已经添加了如何在您的按钮之间传递。
【解决方案2】:

这样,用户只需要点击,点击,再点击。您不必检查输入文件夹路径是否正确。

Sub GetFolder()
    Dim FD As Office.FileDialog
    Dim FolderPath as string
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    FD.Show

    FolderPath = FD.SelectedItems(1)
    Msgbox FolderPath
End Sub

【讨论】:

  • 谢谢,我刚刚尝试过,但如何将其合并到我的初始代码中?
  • 最简单的方法是用我的代码替换folderPath = "C:\Users\patrickw\Desktop\exceltest"
  • 赞成,但这应该是一个Private Function,它返回一个String
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
相关资源
最近更新 更多