手动输入和通过用户表单和文本框输入的区别?

问题描述

TLDR:

当我搜索使用用户表单插入的单元格的值时,我的查找功能不起作用,但是当我手动输入值时却起作用。

我的 VBA 代码有问题。代码应执行以下操作:从单元格中取出值并使用日历中的查找功能搜索它,然后在正确的位置插入一个形状。(就像在甘特图中)

当我手动输入开始日期和结束日期时,没有错误,一切正常。 当我在用户表单中输入开始和结束日期时,我收到运行时错误 91。

在单元格中输入值的这两种可能性之间的区别在哪里?

我的用户表单:

Private Sub Create_Click()

'Einträge Übernehmen

Worksheets("Muster").Range("A1").Value = newProject.ProjectName.Value
Worksheets("Muster").Range("D1").Value = newProject.StartDate.Value
Worksheets("Muster").Range("F1").Value = newProject.EndDate.Value
Worksheets("Muster").Range("C1").Value = newProject.CustumerName.Value

'Project aus Muster Kopieren und in Projectplan einfügen

Worksheets("Muster").Range("A1:F16").copy
Worksheets(1).Range("A1048576").End(xlUp).Offset(2,0).PasteSpecial

'Maske nach Knopfdruck schließen

Unload newProject

'alte einträge Löschen

Worksheets(2).Range("D1:D16").ClearContents
Worksheets(2).Range("F1:F16").ClearContents

End Sub

我的子程序插入条形:

Sub RangetoShape(myRange As Range,Color As Integer)
    
    'Erzeugt ein Shape Objekt nach vorbild einer Range
    
    Dim posLeft As Long
    Dim posTop As Long
    Dim posWidth As Long
    Dim posHeight As Long
    Dim myShape As Shape
    
    posLeft = myRange.Left
    posTop = myRange.Top
    posWidth = myRange.Width
    posHeight = myRange.Height
    
    With myRange.Parent
        Set myShape = .Shapes.AddShape(msoShapeRectangle,posLeft,posTop,posWidth,posHeight)
        
        If Color = 1 Then
            myShape.Fill.ForeColor.RGB = XlRgbColor.rgbDarkGray
        ElseIf Color = 2 Then
            myShape.Fill.ForeColor.RGB = ColorConstants.vbGreen
        ElseIf Color = 3 Then
            myShape.Fill.ForeColor.RGB = ColorConstants.vbYellow
        End If
        
    End With
            
End Sub

Sub refresh()

'Refresh button

Dim i As Integer
Dim findStart As Range
Dim findEnd As Range

ShapesLoeschen
    
For i = 5 To CInt(Worksheets(1).Range("D1048576").End(xlUp).Row)

    If Not IsEmpty(Cells(i,4).Value) And Not IsEmpty(Cells(i,6).Value) Then
             
        Set findStart = Tabelle1.Rows("2").Find(What:=Cells(i,4).Value,LookIn:=xlFormulas)
        Set findEnd = Tabelle1.Rows("2").Find(What:=Cells(i,6).Value,LookIn:=xlFormulas)
 
        'Error Report: programmierte Zellen haben innerhalb kein Datum,sondern anscheind nur einen Verweis oder so
        
        'Error Report: In die Felder können Dati eingetragen werden die am Wochenende sind,ergo die nicht in der Liste sind _
        Quick fix: Wochenenden mit aufnehmen
        
        If Cells(i,2).Value = 1 Then
            RangetoShape Range(findStart.Offset(i - 2,0),findEnd.Offset(i - 2,0)),1
        ElseIf Cells(i,2).Value = 2 Then
            RangetoShape Range(findStart.Offset(i - 2,2
        ElseIf Cells(i,2).Value = 3 Then
            RangetoShape Range(findStart.Offset(i - 2,3
        End If
    End If
    Next
              
End Sub

我发现的主要问题是,如果我通过用户表单输入日期,子 refresh() 中的 find 函数找不到日期。

我对 vba 和 excel 很陌生,这是我的第一个“项目”。所以我知道我是否犯了一些基本错误。我非常感谢您提供的各种帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)