问题描述
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 (将#修改为@)