Can I show all hidden sheets or get hidden sheet with macro?
ex:
ActiveDocument.GetSheet("Età").GetProperties.Show.Always = true
thx!
I would have a variable in the conditional show of the sheet; vHide = 0. If it's 0 then it is visible and you can use 1 for when it should be hidden.
Then you can set the variable with the macro:
Sub ShowSheets
set Hide = ActiveDocument.Variables("vHide")
Hide.SetContent 0, true
End Sub
This can of course be done without the macro by using a set variable action instead.
Related
I'm writing a macro with libreoffice basic to modify the styles and size of a selected (and only selected) chart in my spreadsheets.
After many documentation reading and many tries, I managed to have a partial solution to my problem:
Modifying all charts style
I managed to select a chart by it's indexe and modify it's styles with this macro:
Sub ModifyChart
Dim oDoc As Object
Dim oChart As Object
Dim aSize as new com.sun.star.awt.Size
oSheet = ThisComponent.sheets(0)
oCharts = oSheet.getCharts()
oChart = oCharts.getByIndex(0).getEmbeddedObject()
MsgBox oChart.ImplementationName
oChart.Title.String = "My title"
oChart.Title.CharColor = RGB(0,0,200)
oChart.Title.CharFontName = "Arial"
oChart.Title.CharHeight = 16
oChart.SubTitle.String = "My subtitle"
oChart.SubTitle.CharColor = RGB(0,0,200)
oChart.SubTitle.CharFontName = "Arial"
oChart.SubTitle.CharHeight = 12
oChart.Diagram.Wall.FillStyle = com.sun.star.drawing.FillStyle.SOLID
oChart.Diagram.Wall.FillColor = RGB(200,50,150)
oChart.Area.FillStyle = com.sun.star.drawing.FillStyle.SOLID
oChart.Area.FillColor = RGB(100,50,250)
aSize.Width=640
aSize.Height=400
oChart.setsize(aSize) ' Error occur at this point
End Sub
Problem: It's doesn't work with the selected chart and I can't resize it. The method setsize doesn't work for this kind of object. I tryed to get the parent object of the chart ( frame ? or shape ?) without success.
With ImplementationName, I found that the object is a com.sun.star.comp.sc.scshapeobj
Modifying the selected chart size
I managed to modify the selected chart size by using this macro
Sub ResizeChart
Dim oCurrSel As Object
Dim oItem As Object
Dim aSize As New com.sun.star.awt.Size
oCurrSel = ThisComponent.getCurrentSelection()
oItem = oCurrSel.getByIndex(0)
MsgBox oItem.ImplementationName
aSize.width=16000
aSize.height=12000
oItem.setsize(aSize)
End Sub
Problem: I can't access to the other styles of the chart. I tryed to find a method to get the object content without success. I also tryed to investigate the object with oItem.dbg_properties and oItem.dbg_methods but I didn't found anything useful.
With ImplementationName, I found that the object is a com.sun.star.comp.chart2.chartmodel
I have a look to the libreoffice api but I didn't find how these two kind of object are connected.
Is it possible to make what I want with libreoffice basic ?
Does anyone could explain me the hierachical structure of a libreoffice chart object (parents, childs, ...) and how to deal with it ?
Yes, you are absolutely right - parsing the current selection is not a trivial task.
Since the current selection may contain a variety of objects - Cell, CellRange, SheetCellRanges, Shapes, ShapeCollection, GraphicObjectShape and even in some cases just Text, parsing becomes similar to the game "Miner" - each next step requires additional checks (or error handling " blindly "with the help On Error Resume Next)
Your idea of using ImplementationName to identify objects is generally good. But Andrew Pitonyak in 4.1. Debugging And Inspecting Macros wrote "To determine the document type, look at the services it supports ... I assume that this is safer than using getImplementationName()" and I tend to believe him.
The transition from the current selection to the embedded chart can be something like this:
Sub ModifyChartInCurrentSelection
Dim oCurrentSelection As Variant
Dim i As Long
Dim oNextElementOfSelection As Variant
Dim oEmbeddedObject As Variant
Dim oComponent As Variant
Dim aSize As New com.sun.star.awt.Size
oCurrentSelection = ThisComponent.getCurrentSelection()
If oCurrentSelection.supportsService("com.sun.star.drawing.ShapeCollection") Then
For i = 0 To oCurrentSelection.getCount()-1
oNextElementOfSelection = oCurrentSelection.getByIndex(i)
If oNextElementOfSelection.supportsService("com.sun.star.drawing.OLE2Shape") Then
Rem Size of shape (outer wrapper around the chart)
If oNextElementOfSelection.supportsService("com.sun.star.drawing.Shape") Then
aSize = oNextElementOfSelection.getSize()
aSize.Height = aSize.Height * 2 ' or any other
aSize.Width = aSize.Width / 2
oNextElementOfSelection.setSize(aSize)
EndIf
Rem Properties of EmbeddedObject
oEmbeddedObject = oNextElementOfSelection.EmbeddedObject
If Not IsEmpty(oEmbeddedObject) Then
oComponent = oEmbeddedObject.getComponent()
oComponent.getTitle().String = "Foo-bar Foo-bar Foo-bar"
Rem and other settings...
EndIf
EndIf
Next i
EndIf
End Sub
I am trying to run a goal seek from a Calc Basic Macro.
Public Sub Goal_Seek()
oVariableCell = detailSheet.getCellRangeByName("VariableCell")
oFormulaCell = detailSheet.getCellRangeByName("FormulaCell")
oTargetCell = detailSheet.getCellRangeByName("TargetCell")
ThisComponent.seekGoal(oFormulaCell.CellAddress, oVariableCell.CellAddress, oTargetCell.getValue)
End Sub
When I run the Macro nothing is updated. When I run Goal Seek from the spreadsheet menu Tools->Goal Seek and enter the same cells in the form, the goal seek functions normally.
My Macro is in My Macros-Standard-Module1. The Named ranges return the right cell addresses. What could be causing the goal seek to not update when called from the Macro?
The reason it didn't work is I have to set the result myself when I call goal set from a Macro. I should have guessed that. The new code is
detailSheet = ThisComponent.Sheets(7)
oVariableCell = detailSheet.getCellRangeByName("VariableCell")
oFormulaCell = detailSheet.getCellRangeByName("FormulaCell")
oTargetCell = detailSheet.getCellRangeByName("TargetCell")
oGoal = ThisComponent.seekGoal(oFormulaCell.CellAddress, oVariableCell.CellAddress, oTargetCell.getValue)
oVariableCell.setValue(oGoal.Result)
End Sub
I am trying to learn Julia Language, and my current project is a "5 in a row" program. I started making an interface with Julia wrapper on Gtk for this game, but stumbled upon an interesting problem. Code is below.
The problem is: after callback function work cur_step variable is not changing, and labels of buttons are not changing too. However, if I delete the if-condition in the callback function, buttons will all get labels "x" after pressing as it is supposed to be right now.
I'm writing my code with Julia 1.0 in Jupyter Notebook.
I've tried to set up cur_step variable as global, since thought that it was a scope problem, but it didn't work out.
using Gtk
cur_step = "x"
function click_once_callback(widget)
set_gtk_property!(widget, :sensitive, false)
set_gtk_property!(widget, :label, cur_step)
if cur_step == "x"
cur_step = "o"
else
cur_step = "x"
end
end
letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
win = GtkWindow("GoMoku")
g = GtkGrid()
buttons = []
for i=1:15
b = []
for j=1:15
letter = letters[i]
push!(b,GtkButton("$letter:$j"))
end
push!(buttons,b)
end
for i=1:15
for j=1:15
g[i,16-j] = buttons[i][j]
id = signal_connect(click_once_callback, buttons[i][j], "clicked")
end
end
set_gtk_property!(g, :column_homogeneous, true)
set_gtk_property!(g, :column_spacing, 15) # introduce a 15-pixel gap between columns
set_gtk_property!(g, :row_spacing, 15) # introduce a 15-pixel gap between rows
push!(win, g)
showall(win)
Why is it so that global variable not changing through the callback function? I expect to change cur_step iteratively after each button was clicked.
Thank you in advance!
You need to label cur_step as global inside your function (as well as outside, for good code signposting).
A function can use a variable from its parent scope without problems, as long as there's no assignment anywhere within the function's scope. If there is an assignment somewhere (even if it's in an if block), then the function is interpreted as local; this is true even prior to the point where its assignment occurs.
In order to treat a variable that gets assigned at some point inside the function properly as a global one, you need to explicitly point this out inside the function by using global cur_step.
I was wondering if there is any code that lets some information you enter on Form A remain in the textboxes in Form B when Form A is closed. Im hoping to keep some user information entered into the first form on the second form and still have the first form close.
Thank you!
You can't maintain value from field when you close a form. So you can create some Global vars to copy his value and maintain on memory.
Sometimes i use another option: hide the form A meanwhile you use form B, then when you need to close Form B, simply check if A is open and then close it.
Function FIsLoaded(stFrmName$) As Integer
Dim I As Integer
For I% = 0 To Forms.Count - 1
If (Forms(I%).FormName = stFrmName$) Then
FIsLoaded = True
Exit Function
End If
Next I%
For I% = 0 To Reports.Count - 1
If (Reports(I%).FormName = stFrmName$) Then
FIsLoaded = True
Exit Function
End If
Next I%
FIsLoaded = False
End Function
With this function you can do before close form:
if fisloaded("formA") then
DoCmd.Close acForm ,"formA"
end if
Good Afternoon. I've running into a situation I hope someone here can help with. I'm running Office 2010 on Windows XP and have an Excel worksheet that contains a button to show a modal form (Form01). Form01 contains 3 Listboxes of data. Double-Clicking a item in listbox2 will open another modal form (Form02) so the item can be modified. Unloading Form02 will save the data and call a couple of macros to adjust a named range on the host worksheet. This code is stored in a Module, not on the form.
This is where the problem occurs. When Form02 is unloaded and Form01 is accessable, I cannot select anything in listbox1 or listbox3 or buttons on Form01. I have to first select something in listbox2, then I have access to the other controls on the form. I've tried to .SetFocus on the other controls and add DoEvents after the Form02.Show 1 statement with no luck. The only workaround I've found is to hide and reshow Form01 which causes the screen to flicker. Application.ScreenUpdating = False and back to True doesn't seem to help either. I really need to figure out what the other controls are not accessible when Form02 is shown and then closed. Has anyone else experienced this behaviour or might have a suggestion?
Change this
Private Sub lstSiteMaster_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If lstSiteMaster.ListCount = 0 Then Exit Sub
LoadFrmEditDataset Me.Controls("lstSiteMaster"), "SITE MASTER"
frmEditDataset.Show 1
Unload frmEditDataset
DoEvents
Me.lstSiteMaster.ListIndex = -1
Me.lstSiteList.ListIndex = -1
Me.lstMiniPOR.ListIndex = -1
'''BounceTheForm
End Sub
to
Private Sub lstSiteMaster_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If lstSiteMaster.ListCount = 0 Then Exit Sub
LoadFrmEditDataset Me.Controls("lstSiteMaster"), "SITE MASTER"
frmEditDataset.Show 1
DoEvents
Me.lstSiteMaster.ListIndex = -1
Me.lstSiteList.ListIndex = -1
Me.lstMiniPOR.ListIndex = -1
'''BounceTheForm
End Sub
AND
this
Private Sub cmdApply_Click()
With Me
UpdateDataset .lblDataset, .lblECR, .lblFA, .lblFieldId, .txtFieldValue, .cboAction, .lblIndex + 2
End With
Me.Hide
End Sub
to
Private Sub cmdApply_Click()
With Me
UpdateDataset .lblDataset, .lblECR, .lblFA, .lblFieldId, .txtFieldValue, .cboAction, .lblIndex + 2
End With
Unload Me
End Sub