小编bra*_*raX的帖子

VBA 中本月的第一个星期一

使用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,这显然是上个月。

ms-access vba

1
推荐指数
1
解决办法
5860
查看次数

是否可以使用新的 csproj 项目文件覆盖或清除 dll 构建中的调试路径?

当使用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 格式工作?

path csproj dumpbin pdb

1
推荐指数
1
解决办法
556
查看次数

使用 Excel-DNA 在 VBA 上创建函数,无需 Application.run

我正在使用 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)

vb.net excel vba excel-dna

1
推荐指数
1
解决办法
4370
查看次数

来自数据表或数据视图的 Groupby 和 Sum

我有一个数据表(由 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)

我怎样才能做到这一点 ?

抱歉,如果这很简单,但我对此很菜鸟。

vb.net datatable dataview grouping

1
推荐指数
1
解决办法
1万
查看次数

VBA-检查特定用户表单是否已加载

我想检查在运行代码时是否加载了用户表单。我尝试了几种方法,没有人工作。我记得我以前这样做过,但我不记得我的解决方法。任何的想法?

我在这里和其他地方找到了一些解决方案,但它们也不起作用!

问题是……

  1. vba.userforms 只接受索引号,而不是字符串索引,
  2. 在用户窗体上的循环中,无法检查名称等某些属性!

这是我的尝试:

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)

excel vba userform

1
推荐指数
1
解决办法
3539
查看次数

如何从 Access 中的对象获取准确的 LastUpdated 日期/时间?

我试图从 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 位。

ms-access vba

1
推荐指数
1
解决办法
719
查看次数

在幻灯片上重新定位形状和文本框

我想实现当我选择一个形状或一个文本框时,它们将移动到幻灯片上的相同位置(底部对齐)。我的形状和文本框的高度不同,例如文本框,有些有一行,有些有多行。文本框中的文字在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)

powerpoint vba powerpoint-2016

1
推荐指数
1
解决办法
95
查看次数

VBA UserForm为其参数之一给出运行时错误91

我正在尝试通过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)

excel vba userform

1
推荐指数
1
解决办法
50
查看次数

Excel 表格顶部的新行

我有一段 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)

excel vba

1
推荐指数
1
解决办法
2689
查看次数

合并多个 Worksheet_SelectionChange

我在运行一个 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)

excel vba

1
推荐指数
1
解决办法
177
查看次数