使用VBA可以获得当月的第一个星期一吗?我原以为以下内容会起作用:-
DateSerial(Year(Date), Month(Date), ((7 - Weekday(DateSerial(Year(Date), Month(Date), 7))) + 2) Mod 7)
Run Code Online (Sandbox Code Playgroud)
...但如果我今天使用它,我会得到一个日期 31/07/2017,这显然是上个月。
当使用dumpbin来查看我的媒体库的详细信息:
dumpbin /headers Test.dll
我看到 {{FullFolder to Test.pdb}} 是 pdb 的完整文件夹。
调试目录
Time Type Size RVA Pointer
-------- ------- -------- -------- --------
95BA9373 cv A1 000199D4 17BD4 Format: RSDS, {4AF64893-BAF4-4FF3-9343-E8D5A55E94FF}, 1, {{FullFolder to Test.pdb}}
00000000 repro 0 00000000 0
Run Code Online (Sandbox Code Playgroud)
有没有办法在 csproj 文件中排除这个?
我的 .csproj 看起来像:
<DebugType>full</DebugType>
<IncludeSource>True</IncludeSource>
<IncludeSymbols>True</IncludeSymbols>
<PdbPath>none</PdbPath>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Run Code Online (Sandbox Code Playgroud)
似乎该PdbPath元素不再以新的(vs2017 多框架) .csproj 格式工作?
我正在使用 VB.NET 和Excel-DNA Library创建 Excel 插件。在我的 Addin 项目上创建的函数在工作表上作为公式调用时可以完美运行。但我也希望在编写 VBA 代码时可以使用它们。
因此,假设我SumCalculation在 Excel-DNA 上创建了一个函数,如下所示:
<ExcelFunction(Category:="Calculations", Description:="Sum values", Name:="")>
Public Function SumCalculation(<ExcelArgument("First Value to sum")> Value1 As Double,
<ExcelArgument("Second Value to sum")> Value2 As Double) As Double
Return Value1 + Value2
End Function
Run Code Online (Sandbox Code Playgroud)
当 XLL 生成并加载到 Excel 上时,可以在 VBA 上调用它,如下所示:
Result = Application.Run("SumCalculation", 1, 1)
Run Code Online (Sandbox Code Playgroud)
但是有什么方法可以像下面这样直接调用它吗?
Result = SumCalculation(1, 1)
Run Code Online (Sandbox Code Playgroud) 我有一个数据表(由 xls 文件填充),其中包含不同种类的水果和豆类。
我从这个数据表中创建一个数据视图,并使用 RowFilter 仅包含土豆和西红柿。
现在,我尝试创建一个分组(使用“名称”列)并从另一列“数量”中求和。
实际上 :
Name | Quantity | color
tomatoe | 2 | red
tomatoe | 1 | red
potatoe | 5 | yellow
tomatoe | 1 | red
potatoe | 1 | yellow
Run Code Online (Sandbox Code Playgroud)
我会返回一个数据表或数据视图,如下所示:
Name | Quantity | color
tomatoe | 4 | red
potatoe | 6 | yellow
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点 ?
抱歉,如果这很简单,但我对此很菜鸟。
我想检查在运行代码时是否加载了用户表单。我尝试了几种方法,没有人工作。我记得我以前这样做过,但我不记得我的解决方法。任何的想法?
我在这里和其他地方找到了一些解决方案,但它们也不起作用!
问题是……
这是我的尝试:
Public Function IsFormVisible(FrmName As String) As Boolean
On Error GoTo errorH
IsFormVisible = False
Set Frm = UserForms(FrmName)
If Not Frm Is Nothing Then IsFormVisible = True
End Function
errorH:
IsFormVisible = False
End Function
Run Code Online (Sandbox Code Playgroud)
Public Function IsFormVisible(FrmName As String) As Boolean
Dim Frm As UserForm
On Error GoTo errorH
IsFormVisible = False
For Each Frm In VBA.UserForms
If Frm.Name = FrmName Then
IsFormVisible = True
Exit Function
End If
Next
errorH:
IsFormVisible …Run Code Online (Sandbox Code Playgroud) 我试图从 Access 对象中检索LastUpdated日期,有时它返回 DateCreated 值。
我看到查询MSysObjects 的结果相同:
SELECT MSysObjects.Name,
Switch([Type]=5,'Query',[Type]=-32768,'Form',[Type]=-32764,'Report',[Type]=-32766,'Macro',[Type]=-32761,'Module') AS ObjectType,
MSysObjects.DateUpdate
FROM MSysObjects
WHERE (((Left$([Name],1))<>'~') AND ((MSysObjects.Type) In (5,-32768,-32764,-32766,-32761)))
ORDER BY MSysObjects.DateUpdate DESC;
Run Code Online (Sandbox Code Playgroud)
或从立即窗口使用DAO:
? CurrentDb.Containers("Forms").Documents("frm_POC_Assignment_Override").LastUpdated
正确的日期显示在导航窗格中(如果您选择查看方式 | 详细信息)
并出现在对象属性对话框中:
我使用的是 Access 2016 Office 365,32 位。
我想实现当我选择一个形状或一个文本框时,它们将移动到幻灯片上的相同位置(底部对齐)。我的形状和文本框的高度不同,例如文本框,有些有一行,有些有多行。文本框中的文字在ppt中与Bottom对齐。
我已经尝试使用代码 .top 但它会将具有两行或更多行的文本框移出幻灯片区域。尝试修复所选形状或文本框的高度是否不同,然后它将停留在左下角从底部向上移动并停留在幻灯片上。下面是我到目前为止的代码。谢谢
Sub PositionShape()
Dim oshp As Shape
On Error Resume Next
Set oshp = ActiveWindow.Selection.ShapeRange(1)
With oshp
.LockAspectRatio = False
.Left = 0.5 * 72
.Top = 7.3 * 72
End With
End Sub
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过Sub在excel-VBA中使用参数创建同一无模式UserForm的多个实例。
我可以使用我要分配的三个参数中的两个使用它,但是第三个参数一直在返回
“运行时错误'91':未设置对象变量或带块变量”
我不知道为什么。我可能没有看到明显的错字,但我确实无法指出问题所在。这是我的代码:
Sub AskToClose(targetWksht As Worksheet, targetRow As Integer, test As String)
Dim newInstanceOfMe As Object
Set newInstanceOfMe = UserForms.Add("MOVE_TO_CLOSED") 'MOVE_TO_CLOSED is the name of my UserForm
newInstanceOfMe.targetWksht = targetWksht 'If I comment this line it works just fine, otherwise Run-time error 91
newInstanceOfMe.targetRow = targetRow
newInstanceOfMe.test = test
newInstanceOfMe.Show vbModeless
End Sub
_____________________________________________________________________
Sub test()
Dim openWksht As Worksheet
Set openWksht = Worksheets("OPEN WO") 'The worksheet exists and works just fine everywhere else
Call AskToClose(openWksht, 2, "test …Run Code Online (Sandbox Code Playgroud) 我有一段 VBA 代码想要增强。有两个 Excel 表 - ToDo和Done。该代码获取ToDo表中的第一行(我使用表标题作为锚单元并向下偏移一行以获取值)。
运行一些其他功能后,我想将此值添加到Done表中,然后从原始ToDo表中删除它。
这一切都有效 - 需要注意的是ListRows.Add函数像往常一样将新行添加到表的底部。有没有办法将新的空行和内容添加到“完成”表的顶部,以便最后处理的值将自上而下而不是自下而上运行?
某些范围倒序函数可能会打乱整个顺序。另外在 .Range(2) 中添加时间戳并始终进行排序对于解决方法来说感觉太混乱(应该有一个更简洁的方法,对吧?)
Sub Data()
Range("Data_transfer").Value = Range("ToDo_header").Offset(1).Value
'some irrelevant code runs here
Set newrow = ActiveSheet.ListObjects("Done").ListRows.Add
With newrow
.Range(1) = Range("Data_transfer").Value
End With
Range("ToDo_header").Offset(1).Delete
End Sub
Run Code Online (Sandbox Code Playgroud) 我在运行一个 Private Sub Worksheet_SelectionChange 时没有问题,但是当我添加多个 Worksheet_SelectionChange 事件时,它没有运行。后来,我才知道不可能在同一工作表中运行不同的工作表选择更改事件。
根据我的理解,我有四个不同的 Private Sub Worksheet_SelectionChange 事件,试图在各种站点的帮助下将它们合并,但没有一个对我有用。我能得到一些帮助吗,1。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cells1 As Range
Set cells1 = ActiveSheet.Range("B1:B27")
If Not (Intersect(Target, cells1) Is Nothing) Then
ActiveSheet.Range("B30").Value = Target.Value
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
2.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cells2 As Range
Set cells2 = ActiveSheet.Range("C1:C27")
If Not (Intersect(Target, cells2) Is Nothing) Then
ActiveSheet.Range("C30").Value = Target.Value
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
3.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cells3 As Range …Run Code Online (Sandbox Code Playgroud)