如何使用VBA If语句的环境变量在Excel中获取Cell值

时间:2017-08-24 12:03:12

标签: excel-vba vba excel

我有2个电子表格,EG。 test1.xlxs和test2.xlsm

test1在表1单元格B6上具有以下数据:testdata

如果test1不存在或者信息中包含错误的信息,那么test2有一些我要禁用的vba代码,因此,我需要在VBA IF语句中使用一个我不需要的环境变量编辑代码或每次将它们移动到新的PC时重新链接工作表

我遇到的问题是,当我使用环境变量时If语句测试字符串而不是单元格值EG" = C:\ users \ username \ documents [test.xlxs] Sheet1' !$ B $ 6#34;而不是testdata

这是我目前在test2中的代码:

Sub Check_Key()
Dim Key As String
Key = "='" & Environ("USERPROFILE") & "\Documents\[test.xlxs]Sheet1'!$B$6"
If Key = Sheet1.Range("D8") = True Then
        Sheet1.Range("D9") = "Valid"
    Else
        Sheet1.Range("D9") = "Invalid"
    End If
End Sub

有什么方法可以让它发挥作用吗? 我更希望VBA脚本执行验证而不是工作簿上的单元格中的if语句

要求: 用户应该无法在test1中查看数据(电子表格应保持关闭状态) 来自test1的数据需要通过VBA IF语句进行验证 test2应该能够在pc上的任何地方,而test1应该在我的文档中

这是Spreadsheets的链接,它包括许可证文件,测试表和密钥生成器 Documents

2 个答案:

答案 0 :(得分:1)

以下代码从已关闭的工作簿中复制单元格B6中的值。

Sub test()

'variables
Dim key As Variant, FolderName As String, wbName As String

FolderName = Environ("USERPROFILE") & "\Documents"

wbName = Dir(FolderName & "\" & "test.xlsx") 'Workbook name

key = GetInfoFromClosedFile(FolderName, wbName, "Sheet1", "B6")

End Sub

'Returns value in cell CREDIT: http://erlandsendata.no/?p=2106
Private Function GetInfoFromClosedFile(ByVal wbPath As String, wbName As String, wsName As String, cellRef As String) As Variant
Dim arg As String
    GetInfoFromClosedFile = vbNullString
    If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\"
    If Dir(wbPath & wbName) = vbNullString Then Exit Function
    arg = "'" & wbPath & "[" & wbName & "]" & wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
    'On Error Resume Next
    GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
End Function

答案 1 :(得分:0)

如果test1已经在同一个excel实例中打开:

key = workbooks("test1.xlsm").worksheets("sheet1").range("B6")

如果他不是

set wbk = Workbooks.open (Environ("USERPROFILE") & "\Documents\test.xlsx")
key = wbk.worksheets("sheet1").range("B6")
' other code
wbk.close false