在VBA中,有时我们想在某些条件成立后退出程序.但我使用end
或exit sub
?
我有一个大型电子表格,其中包含一个名为"角色"的列.在此列中的值如下:
ROLES
Author
Author;
Publishing; Author;
Something Else; Author; Publishing
Run Code Online (Sandbox Code Playgroud)
还有其他列可能存在"作者"一词.
我需要做的是仅在我的"角色"列中查找"作者",并将其替换为"创作",而不会在其之前或之后丢失任何内容.即最终结果应该是......
ROLES
Authoring
Authoring;
Publishing; Authoring;
Something Else; Authoring; Publishing
Run Code Online (Sandbox Code Playgroud)
我尝试了FIND和REPLACE函数,但是它取代了整个单元格值,而不仅仅是它的一部分.
= IF(FIND( "作者",[@角色],1),REPLACE( "作者",1,6, "创作"))
有人可以帮忙吗?我宁愿不是我们的VB解决方案,因为我不熟悉如何做到这一点,所以希望有一个基于公式的方式?
干杯
我正在尝试在Jupyter笔记本中创建一个Sankey图表,我的代码基于此处显示的第一个示例.
我最终得到了这个,我可以运行而不会出现任何错误:
import numpy as npy
import pandas as pd
import plotly as ply
ply.offline.init_notebook_mode(connected=True)
df = pd.read_csv('C:\\Users\\a245401\\Desktop\\Test.csv',sep=';')
print(df.head())
print(ply.__version__)
data_trace = dict(
type='sankey',
domain = dict(
x = [0,1],
y = [0,1]
),
orientation = "h",
valueformat = ".0f",
node = dict(
pad = 10,
thickness = 30,
line = dict(
color = "black",
width = 0.5
),
label = df['Node, Label'].dropna(axis=0, how='any'),
color = df['Color']
),
link = dict(
source = df['Source'].dropna(axis=0, how='any'),
target = df['Target'].dropna(axis=0, …
Run Code Online (Sandbox Code Playgroud) 在VBA中,如果我比较字符串或类似字符串vbNullString
而不是空字符串,它会有什么不同; ""
?如果是这样,两者之间有什么不同?
我如何获得一个范围内的细胞的相对位置?使用Row
- 和Column
- 属性查找工作表中单元格的位置是微不足道的,但我不确定如何在一个范围内执行相同操作.
我考虑使用我想要找到单元格位置的左上角单元格的位置,然后从工作表中单元格的位置中扣除它(-1),但是它有点麻烦.有更优雅的方式来解决这个问题吗?
到目前为止,我最好的尝试,包括测试,是这样的:
Option Explicit
Sub test()
Dim r As Range: Set r = Sheet1.Range("B2:E10")
Dim c As Range: Set c = Sheet1.Range("C2")
Debug.Print "Column in sheet: " & c.Column
Debug.Print "Row in sheet: " & c.Row
Debug.Print "Column in range: " & column_in_range(r, c)
Debug.Print "Row in range: " & row_in_range(r, c)
End Sub
Function column_in_range(r As Range, c As Range) As Long
column_in_range = c.Column - (r.Cells(1, 1).Column - 1)
End Function …
Run Code Online (Sandbox Code Playgroud) 我有两个包含图表的工作表,并使用宏来运行包含图表的所有工作表并更新图表中的值.
但是,在尝试在第一个工作表之后引用工作表中的图表时遇到问题 - 尽管工作表的引用发生了更改,但对图表的引用却没有.
循环看起来像这样:
For Each ws In ThisWorkbook.Worksheets
Debug.Print ws.Name
Debug.Print ws.ChartObjects("Kortsone").Chart.Name
With ws.ChartObjects("Kortsone").Chart
...
End With
Next ws
Run Code Online (Sandbox Code Playgroud)
我到达即时窗口的输出如下:
Grafar ovn 3
Grafar ovn 3 Kortsone
Grafar ovn 4
Grafar ovn 3 Kortsone
Run Code Online (Sandbox Code Playgroud)
正如您所看到的对工作表的引用更改,但图表引用没有.
有没有办法解决这个问题,还是我必须用独特的名称重命名我的所有图表?
我正在使用Excel 2013
- 编辑 -我现在已根据评论中的建议进行了一些测试,看来打印到即时窗口的内容取决于当前活动工作表的内容.
尝试使用for each chartobject
遇到了与我之前相同的问题:
Sub test2()
Dim ws As Worksheet
Dim ch As ChartObject
For Each ws In ThisWorkbook.Worksheets
For Each ch In ws.ChartObjects
If ws.CodeName = "Graf4" Then
Debug.Print ws.Name
Debug.Print ch.Name
Debug.Print ch.Chart.Name …
Run Code Online (Sandbox Code Playgroud) 可以免费使用C#吗?你会用哪些工具?
我正在寻找的工具:
其他有关免费工具的建议也欢迎.
请注意,IMO,Visual Studio Express不提供所有这些工具.
我有以下代码打开一个表单,然后做一些事情.
Sub lag_ny_a3()
Dim frm As ufNyA3
Set frm = New ufNyA3
frm.Show
If Not frm Is Nothing Then
MsgBox("Doing stuff")
Unload frm
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
然后我在表单中有以下代码
Private Sub cmdAvbryt_Click()
Unload Me
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,即使在表单中单击了cmdAvbryt按钮,第一个代码片段也会输入if语句,就好像表单没有被卸载一样.为什么会这样,如果按下cmdAvbryt按钮,如何防止if语句中的代码被执行?
有没有办法将标注标签添加到图表中的某个点,而不使用Select
?
录制宏,我得到了这个:
Sub Macro9()
ActiveSheet.ChartObjects("SPC").Activate
ActiveChart.FullSeriesCollection(1).Select
ActiveChart.FullSeriesCollection(1).Points(4).Select
ActiveChart.SetElement (msoElementDataLabelCallout)
End Sub
Run Code Online (Sandbox Code Playgroud)
但我宁愿避免使用Select
.我尝试SetElement
在点上使用-method,但失败了.使用HasDataLabel = True
-method只需添加一个数据标签.
是否有任何解决方法来选择点然后SetElement
在图表上使用,或者我是否必须满足于类似上述宏的东西?
我有一个包含两个图表的电子表格,我想根据表格中的值在其中一个系列的点旁边添加一些文本框.
我为此创建了两个程序,每个程序都有自己的优点和缺点:
Sub add_comments(apply_to As Series, source_range As Range)
Dim i As Long
Dim c As Range
If source_range.Count > apply_to.Points.Count Then
Set source_range = source_range.Resize(apply_to.Points.Count, 1)
End If
i = 1
For Each c In source_range
If Not IsError(c) And i <= apply_to.Points.Count Then
If Len(c.Text) <> 0 Then
apply_to.Points(i).HasDataLabel = True
apply_to.Points(i).DataLabel.Text = c.Value2
apply_to.Points(i).DataLabel.Format.AutoShapeType = msoShapeRectangularCallout
With apply_to.Points(i).DataLabel.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
apply_to.Points(i).DataLabel.Position = xlLabelPositionAbove
Else
If apply_to.Points(i).HasDataLabel Then
apply_to.Points(i).DataLabel.Delete
End …
Run Code Online (Sandbox Code Playgroud) 我有一堆图表,其中图表标题不适合标题框中的一行。
我不想进一步减小字体大小,而是更愿意使文本框更宽一些。
将图表标题的当前宽度打印到即时窗口,我发现它当前的宽度约为 245 像素。看到这一点,我决定使用以下代码来尝试调整工作表中给定名称的所有图表的大小:
Dim ws As Worksheet
Dim co As ChartObject
For Each ws In ThisWorkbook.Worksheets
For Each co In ws.ChartObjects
If co.Name = "Tiltaksplan" Then
co.Chart.ChartTitle.Width = 260
End If
Next co
Next ws
Run Code Online (Sandbox Code Playgroud)
然而,它似乎.ChartTitle.Width
是一个只读属性,因此当我尝试更改它时,宏会停止并出现该行错误。
还有其他方法可以调整标题框的大小,还是我只能手动操作?
我有一个更新表单"LoadingInterface"的函数.该函数如下所示:
Private Sub updateLoadingBar(Optional tekst As String, Optional barOnePerc As Long, Optional barTwoPerc As Long)
If Not IsMissing(tekst) Then
LoadingInterface.Label1.Caption = tekst
End If
If Not IsMissing(barOnePerc) Then
LoadingInterface.Bar.Width = barOnePerc * 1.68
LoadingInterface.prosent.Caption = barOnePerc & "%"
LoadingInterface.prosent.Left = barOnePerc * 1.68 / 2 - 6
End If
If Not IsMissing(barTwoPerc) Then
LoadingInterface.SubBar.Width = barTwoPerc * 1.68
End If
LoadingInterface.Repaint
End Sub
Run Code Online (Sandbox Code Playgroud)
然后我调用这样的函数,期望它只更新文本字段,因为缺少其他两个参数.
Call updateLoadingBar(tekst:="Test")
Run Code Online (Sandbox Code Playgroud)
这适用于更新Label1
,但不幸的是其他两个值也被更新 - 似乎不包括函数调用中的任何值使得VBA假设两个变量值为0.而且,似乎IsMissing函数没有检测到调用函数时两个值都缺失,这是一个更大的问题.使用F8逐步执行代码确认确实输入了所有if语句.
有没有什么办法让代码跳过我的函数两个最下面的if语句,如果提供的参数没有值barOnePerc
和barTwoPerc
?
我正在使用weekdayname
-function将一些工作日打印到电子表格中.这很好,除了工作日是用当地语言(挪威语)写的,而不是我想要的英语.有没有办法指定函数返回其结果的语言,或者我是不是自己制作了自己的UDF?
excel ×10
vba ×10
excel-vba ×8
excel-2016 ×4
charts ×2
forms ×2
c# ×1
deployment ×1
ide ×1
jupyter ×1
jupyter-lab ×1
plotly ×1
python ×1