vba - Excel 设置事件工作簿

标签 vba excel

我搜索了论坛,找不到适合我的问题的答案。我对 Excel VBA 很陌生,并且无法激活我刚刚打开的工作簿。正下方是给我带来麻烦的部分。

所以我按下一个按钮,它把我带到文件路径,然后我选择一个要打开的文件。每周这个文件都有一个不同的名称,直到我打开文件路径并查看它之前我不确定它是什么。

一旦我打开它,我希望我的宏能够操作文件中的数据并将其复制并粘贴到运行代码的工作簿中。但是,当我运行此宏并打开文件时,它不会激活新打开的工作簿并运行宏的其余部分以尝试操作原始文件中的数据。

我想我要么需要以不同的方式打开文件,以便我刚刚打开的工作簿是事件的,要么在不知道文件名的情况下弄清楚如何激活新打开的工作簿。谢谢您的帮助。

Dim filepath As String
filepath = Environ("USERPROFILE") & "\Dropbox\On the go ordering"
Call Shell("explorer.exe" & " " & filepath, vbNormalFocus)


Range("A6:E500").Select
Sub on_the_go_button()

    Dim RANKER As Workbook

    Set RANKER = ThisWorkbook

    Dim filepath As String
    filepath = Environ("USERPROFILE") & "\Dropbox\On the go ordering"
    Call Shell("explorer.exe" & " " & filepath, vbNormalFocus)


    Range("A6:E500").Select
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$E$495").AutoFilter Field:=1, Criteria1:=RGB(213, _
        223, 248), Operator:=xlFilterCellColor
    Range("G1").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RIGHT(RC[-6],8)=""Subtotal"",VALUE(LEFT(RC[-6],6)),"""")"
    Range("H1").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""","""",RC[-4])"
    Range("I1").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""","""",RC[-4])"
    Range("G1:I1").Select
        Selection.Copy
    Range("G1:I500").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    Selection.Copy
    RANKER.Activate
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Range("P1:Q74").Select
    Selection.Copy
    Sheets("Contest").Select
    Range("A3").Select

    ActiveCell.End(xlToRight).Select


    ActiveCell.Offset(0, 1).Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

最佳答案

因为OP指定了默认路径;我建议使用 Application.FileDialog(msoFileDialogFilePicker)
enter image description here

用法:

Dim WeeklyWorkbook

Set WeeklyWorkbook = getWeeklyWorkbook

If WeeklyWorkbook Is Nothing Then
    MsgBox "No file selected", vbInformation, "Action Cancelled"
    Exit Sub
End If
Function getWeeklyWorkbook() As Workbook

    Dim fDialog As FileDialog, result As Integer
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)

    'Optional: FileDialog properties
    fDialog.AllowMultiSelect = False
    fDialog.Title = "Select a file"
    fDialog.InitialFileName = Environ("USERPROFILE") & "\Dropbox\On the go ordering"
    'Optional: Add filters
    fDialog.Filters.Clear
    fDialog.Filters.Add "Excel files", "*.xls, *.xlsx, *.xlsm"
    fDialog.Filters.Add "All files", "*.*"

    'Show the dialog. -1 means success!
    If fDialog.Show = -1 Then
        Set getWeeklyWorkbook = Workbooks.Open(fDialog.SelectedItems(1))
    End If

End Function

引用:VBA FILEDIALOG – OPENING, SELECTING AND SAVING FILES AND FOLDERS

关于vba - Excel 设置事件工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39115085/

相关文章:

vba - 在不带参数的自定义函数中添加两个单元格

vba - 将单个 Excel 工作表另存为 CSV

python - 在 VBA 中,如何使用 Shell.Run 而不是 Shell.Exec 来捕获 shell 输出?

vba - 使用VBA根据句子的起始字符改变文本的颜色

string - VBA:如何在字符串中查找 "@"符号之后的值

regex - 使用 Regex 更新 VBA 代码

excel - 刻度标签数字格式excel

Excel公式,找到字符串中OU=的第一个实例并删除它前面的所有字符

excel - 如何将 .ods 电子表格 (OpenOffice.org) 保存为 .xlsx (MS Office Excel 2007)

java - 使用 java jxl 在 excel 中创建和访问工作表