Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 VBA匹配函数不匹配,尽管源中有搜索值_Excel_Vba - Fatal编程技术网

Excel VBA匹配函数不匹配,尽管源中有搜索值

Excel VBA匹配函数不匹配,尽管源中有搜索值,excel,vba,Excel,Vba,工作表中确实包含字符串值,我不知道为什么匹配失败。我试过在工作表上使用匹配功能,它很有效。这可能是某种参考问题吗?工作表中的单元格似乎没有奇怪的空白。如果有人能帮我做到这一点,那就太好了: 公共子TestMe() 将ws设置为工作表:设置ws=工作表(1) Dim StartRow作为变体 StartRow=Application.Match(“宣布日期”,ws.Range(“A:A”),0) 如果IsError(StartRow),则退出Sub 如果StartRow

工作表中确实包含字符串值,我不知道为什么匹配失败。我试过在工作表上使用匹配功能,它很有效。这可能是某种参考问题吗?工作表中的单元格似乎没有奇怪的空白。如果有人能帮我做到这一点,那就太好了:

公共子TestMe()
将ws设置为工作表:设置ws=工作表(1)
Dim StartRow作为变体
StartRow=Application.Match(“宣布日期”,ws.Range(“A:A”),0)
如果IsError(StartRow),则退出Sub
如果StartRow<2,则退出Sub
ws.Range(“A1:A”&StartRow-1).EntireRow.Delete
端接头

  • StartRow
    声明为
    变量
    ,因为如果
    公告日期
    不存在,它将返回错误
  • 可以使用iError(StartRow)检查,如果不是这样,则退出
  • 如果StartRow<2,则需要退出Sub
    ,以避免StartRow为1时可能出现的错误
看起来不错,错误是因为搜索失败。您确定
ws
与屏幕截图是同一张图纸吗?确保在添加了整个代码的A80中,字符串的末尾没有多余的空格。不应该是空白问题,因为我尝试在工作表本身上使用match函数。这有点错误-
Set ws=ExtractRawDivFromAastocks(StockCode)
代码要求函数做太多事情。例如,添加工作表、返回工作表、从查询表中获取数据并刷新工作表。最后返回一个工作表。重构它是个好主意。只是想知道-你能像这样调用函数
CleanAastocksDiv StockCode,ws
而不是
调用CleanAastocksDiv(StockCode,ws)
?当代码搜索单元格时,查询没有完成!
Option Explicit

Sub ExtractDivFromAastocks()

    Dim StockCode As String, Anchor As String
    Dim ws As Worksheet

    StockCode = "02800"
    Anchor = "Announce Date"
    Set ws = ExtractRawDivFromAastocks(StockCode)
    Call CleanAastocksDiv(StockCode, ws)

End Sub

Private Function ExtractRawDivFromAastocks(StockCode As String)

    Dim WsFound As Boolean
    Dim i As Integer
    WsFound = False

    For i = 1 To Sheets.Count():
        If Worksheets(i).Name = StockCode Then
            WsFound = True
        End If
        If WsFound = True Then
            Exit For
        End If
    Next i
    If WsFound = True Then
        Application.DisplayAlerts = False
        Worksheets(StockCode).Delete
        Application.DisplayAlerts = True
    End If

    Dim ws As Worksheet
    Dim qt As QueryTable

    Dim Website As String, Aastock As String

    Aastock = "http://www.aastocks.com/en/stocks/analysis/dividend.aspx?symbol="

    Website = Aastock & StockCode

    Set ws = Sheets.Add(After:=Worksheets(Worksheets.Count()))
    ws.Name = StockCode

    Set qt = ws.QueryTables.Add( _
                Connection:="URL;" & Website, _
                Destination:=ws.Range("A1"))

    With qt
        .RefreshOnFileOpen = True
        .Refresh

    End With

    Set ExtractRawDivFromAastocks = ws

End Function

Private Sub CleanAastocksDiv(StockCode As String, ws As Worksheet)

    Dim StartRow As Integer

    StartRow = Application.Match("Announce Date", ws.Range("A:A"), 0)

    ws.Range("A1:" & _
                ws.Cells(StartRow - 1, ws.Columns.Count()).Address).EntireRow.Delete

End Sub
Public Sub TestMe()

    Dim ws As Worksheet: Set ws = Worksheets(1)
    Dim StartRow As Variant

    StartRow = Application.Match("Announce Date", ws.Range("A:A"), 0)

    If IsError(StartRow) Then Exit Sub
    If StartRow < 2 Then Exit Sub

    ws.Range("A1:A" & StartRow - 1).EntireRow.Delete

End Sub