Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在单个工作簿上启用宏_Excel_Vba - Fatal编程技术网

Excel 在单个工作簿上启用宏

Excel 在单个工作簿上启用宏,excel,vba,Excel,Vba,所以,我在做一个自动化项目,遇到了一个障碍,因为我不能调用任何下载的Excel文件 当我尝试手动打开Excel文件时,其VB编辑器被禁用。。。所有其他打开的Excel文件都已启用它 我使用下面的方法下载/打开上述Excel(XLSX)文件 我可以使用工作簿打开Excel文件。打开,但打开的XLSX文件未在VBAProject窗口中列出,因此我无法调用工作表中的任何内容 有人在这里遇到过吗?我们可以在单个工作簿上强制启用宏设置吗?a.xlsx文件不能有宏。在我的测试中,VB编辑器没有被禁用,只是文

所以,我在做一个自动化项目,遇到了一个障碍,因为我不能调用任何下载的Excel文件

当我尝试手动打开Excel文件时,其VB编辑器被禁用。。。所有其他打开的Excel文件都已启用它

我使用下面的方法下载/打开上述Excel(XLSX)文件

我可以使用
工作簿打开Excel文件。打开
,但打开的XLSX文件未在VBAProject窗口中列出,因此我无法调用工作表中的任何内容


有人在这里遇到过吗?我们可以在单个工作簿上强制启用宏设置吗?

a
.xlsx
文件不能有宏。在我的测试中,VB编辑器没有被禁用,只是文件中没有要显示的宏。如果在Excel设置中启用了宏,则工作簿可能仍需要位于Excel的受信任位置,才能运行宏。

a
.xlsx
文件不能有宏。在我的测试中,VB编辑器没有被禁用,只是文件中没有要显示的宏。如果您在Excel设置中启用了宏,则工作簿可能仍需要位于Excel的受信任位置,以允许宏运行。

您好,抱歉造成混淆。我不想在
.xlsx
文件上设置宏,我只是想引用它的单元格进行复制。请参阅
工作簿后的for循环。打开
,打开文件后,LoginWkbk对象仍然是
。。。也尝试将其添加到受信任的位置,但无效。不过谢谢。嗨,保罗,很抱歉给你添麻烦。我不想在
.xlsx
文件上设置宏,我只是想引用它的单元格进行复制。请参阅
工作簿后的for循环。打开
,打开文件后,LoginWkbk对象仍然是
。。。也尝试将其添加到受信任的位置,但无效。不过谢谢你。
Sub GetLogins()
Application.ScreenUpdating = False
NavSheet.Unprotect [pw]
Dim LoginWkbk As Workbook, LoginWksht As Worksheet
Dim WinHTTPRequest As Object, ADOStream As Object
Dim URL As String
Dim FileRev As Long, LastRow As Long, x As Long
Dim ts As Double

ts = Timer
FileRev = [Revision] ' The current logins file revision
FileRev = FileRev + 1 ' Check for the next revision. Hah!

TryAgain:
If Password = "" Then AcctLoginsForm.Show ' Password not (yet?) supplied

' Second line of security.
If Username = "" Or Password = "" Then
    ' This checks if the user provided the complete information required.
    ' If they didn't we would clear the admin logins sheet of any information that was in there.
    Call ClearAcctsSheet
    MsgBox "Insufficient information submitted.", vbOKOnly, "Window_Title"
    GoTo ExitSub
End If

' The logins file URL
URL = "https://mysecreturl" & FileRev & ".xlsx"
Set WinHTTPRequest = CreateObject("Microsoft.XMLHTTP")

    With WinHTTPRequest
        ' "GET" command with username and password
        .Open "GET", URL, False, Username, Password
        .Send

        Select Case .Status
            Case 401
                ' Incorrect credentials.
                If MsgBox("Incorrect Username/Password supplied. Try again?", vbYesNo, "Window_Title") = vbYes Then
                    Call ClearAcctsSheet
                    Password = ""
                    GoTo TryAgain
                Else
                    GoTo ExitSub
                End If
            Case 404
                ' The next revision is not yet uploaded, so we set to download the previous revision
                FileRev = FileRev - 1
                GoTo TryAgain
            Case 200
                ' Set the "Revision" named range to the current file revision
                [Revision] = FileRev
        End Select

        Set ADOStream = CreateObject("ADODB.Stream")
        ADOStream.Open
        ADOStream.Type = 1
        ADOStream.Write .ResponseBody
        ADOStream.SaveToFile Environ$("temp") & "\logins.xlsx", 2 ' Save the file in the temp file overwriting if the file exists
        ADOStream.Close
    End With

    ' Need to clear out the Accounts Sheet fields before populating it with the new credentials
    AcctsSheet.Range("A:C").ClearContents

    Set LoginWkbk = Workbooks.Open(Environ$("temp") & "\logins.xlsx")
    Set LoginWksht = LoginWkbk.Sheets(1)
    LastRow = LoginWksht.Cells(Rows.Count, 1).End(xlUp).Row ' Last row. Duh.
    For x = 1 To LastRow
        ' Copy-pasting the information from the logins file crashes Excel, hence this for-loop.
        AcctsSheet.Range("A" & x).Value = LoginWksht.Range("A" & x).Value
        AcctsSheet.Range("B" & x).Value = LoginWksht.Range("G" & x).Value
        AcctsSheet.Range("C" & x).Value = LoginWksht.Range("H" & x).Value
        Application.StatusBar = "Extraction complete. Time elapsed: " & Round(Timer - ts, 2)
        If LoginWksht.Range("A" & x).Value = "" Then
            Exit For
        End If
    Next x
    LoginWkbk.Close False ' Close the logins file
    Kill Environ$("temp") & "\logins.xlsx" ' Delete the logins file
    [DateToday] = Format(Now, "m/d/yyyy") ' Set the "DateToday" named range to the current day.

ExitSub:
NavSheet.Protect [pw]
NavSheet.Activate
ThisWorkbook.Save
SetToNothing WinHTTPRequest, ADOStream, LoginWkbk, LoginWksht
Application.ScreenUpdating = True
End Sub